<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <script th:src="@{/echarts/echarts.min.js}"></script>
    <script th:src="@{/echarts/china.js}"></script>
    <script th:src="@{/echarts/jquery-1.11.1.min.js}"></script>
    <link media="all" rel="stylesheet" th:href="@{/layui/css/layui.css}">
    <script charset="utf-8" th:src="@{/layui/layui.js}"></script>

    <style>
        .container {
            position: relative;
            min-height: 800px;
            padding: 15px;
        }

        .top-align {
            position: absolute;
            right: 20px;
            top: 20px;
        }

        .bottom-right {
            position: absolute;
            right: 20px;
            bottom: 20px;
        }

        /* 统一边框和圆角 */
        .top-align select,
        .bottom-right h2 {
            border-radius: 4px;
            border: 1px solid #ddd;
        }

        /* 响应式布局 */
        @media (max-width: 1200px) {
            .top-align { right: 10px; top: 10px; }
            .bottom-right { right: 10px; bottom: 10px; }
        }
    </style>
</head>

<body class="childrenBody">

<div>
    <!-- 内容主体区域 -->
    <div style="padding: 15px;">
        <div class="container">
            <div class="top-align">
                <!-- 普查时间下拉框 -->
                <select id="censusTimeSelector" style="
                        padding: 5px 15px;
                        border: 1px solid #ddd;
                        border-radius: 4px;
                        font-size: 14px;
                        background: #fff;">
                </select>
            </div>

            <!-- 右下角：pie.html 中的返回首页的链接 -->
            <div class="bottom-right">
                <h2 style="padding: 10px 20px;"><b><a th:href="@{/toChina}">返回首页</a></b></h2>
            </div>

            <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
            <div id="main" style="width: 1000px;height:800px;"></div>
        </div>
    </div>
</div>
<script type="text/javascript">
    // 基于准备好的dom，初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));

    option = {
        title: {
            text: '中国普查人口数据饼图(单位：万人)',
            // subtext: '各省累计确诊人数（截止至北京时间：2022-06-05 15:40:38）',
            left: 'center'
        },
        tooltip: {
            trigger: 'item'
        },
        legend: {
            orient: 'vertical',
            left: 'left'
        },
        toolbox: {
            feature: {
                saveAsImage: {}
            }
        },
    };

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);

    // 使用 jQuery 的 $.ajax 方法发起一个异步的 HTTP 请求
    $.ajax({
        // 设置请求的目标 URL，这里会向服务器的 /query 接口发送请求
        url: "/queryPie",
        // 指定期望从服务器返回的数据类型为 JSON，jQuery 会自动将响应内容解析为 JavaScript 对象
        dataType: "json",
        // 当请求成功（服务器返回状态码为 200）时执行的回调函数
        success: function (data) {
            // 填充选择框
            var selector = $('#censusTimeSelector');
            for (var censusTimeCode in data) {
                selector.append($('<option>', {
                    value: censusTimeCode,
                    text: data[censusTimeCode][0].censusDesc
                }));
            }

            // 初始加载第一个普查时间的数据
            var firstCensusTimeCode = Object.keys(data)[0];
            updateChart(data[firstCensusTimeCode]);

            // 选择框改变事件
            selector.on('change', function () {
                var selectedCensusTimeCode = $(this).val();
                updateChart(data[selectedCensusTimeCode]);
            });
        },
        // 当请求失败时执行的回调函数
        error: function (jqXHR, textStatus, errorThrown) {
            // 在控制台输出请求失败的错误信息，包括请求状态和错误描述
            console.error("请求失败：", textStatus, errorThrown);
        }
    });

    function updateChart(data) {
        // 将从后端获取的数据转换为包含 name 和 value 的格式
        let formattedData = [];
        // 使用 for...in 循环遍历服务器返回的 data 对象的每个属性
        for (let i in data) {
            let item = {
                name: data[i].cityName,
                value: data[i].population
            };
            // 获取当前普查描述
            let censusDesc = data[0].censusDesc;
            let updateTime = data[0].updateTime;

            // 更新标题和副标题
            option.title.text = `中国${censusDesc}数据饼图(单位：万人)`;
            option.title.subtext = `统计截止时间：${updateTime}`;
            formattedData.push(item);
        }

        // 使用 echarts 图表对象 myChart 的 setOption 方法更新图表的配置选项
        myChart.setOption({
            // 更新标题
            title: option.title,
            // 设置图表的系列配置
            series: [
                {
                    name: '中国普查人口数据',
                    type: 'pie',
                    radius: '50%',
                    data: formattedData,
                    emphasis: {
                        itemStyle: {
                            shadowBlur: 10,
                            shadowOffsetX: 0,
                            shadowColor: 'rgba(0, 0, 0, 0.5)'
                        }
                    }
                }
            ]
        });
        // 在控制台输出请求成功的提示信息，并打印更新后的 dataList 数组
        console.log("请求成功，数据已更新：", data);
    }
</script>
</body>
</html>